<?php

namespace App\Http\Controllers\Test;


use App\Http\Controllers\Controller;
use App\Service\Photo\Image;
use PHPQRCode\QRcode;


class PictureController extends Controller
{

    // 图片压缩 (图片不要超过10M，不然内存不足，打不开图片)
    // 如果图片过大，则直接压缩
    // 小图片也会进行压缩处理
    // 所有处理都是无背景图片的
    // app\service\Image 改写与 think-image（think-image压缩图片是有背景的）
    public function compress()
    {
        $file = $this->getData('path');
        $file = __DIR__.'/image/111.png';
        $this->throwReturn(!is_file($file), '文件不存在！');


        $image = Image::open($file);
        // 返回图片的宽度
        $width = $image->width();
        // 返回图片的高度
        $height = $image->height();
        // 返回图片的类型
        $type = $image->type();
        // 返回图片的mime类型
        $mime = $image->mime();
        // 返回图片的尺寸数组 0 图片宽度 1 图片高度
        $size   = $image->size();
        $toFile = dirname($file).'/new.jpg';

        // 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.png
        $to_width = 870;
        if($to_width > $width){
            $image->thumb($width, $height)->save($toFile);
        } else{
            $to_height = $height * $to_width / $width;
            $image->thumb($to_width, $to_height)->save($toFile);
        }

        // [$width, $to_width, $width / $to_width, $height, $to_height, $height / $to_height]

        return $this->success($toFile);
    }

    // 有些图片处理后，体积不是明显编号，所以自己写一遍
    public function my()
    {
        // 图片
        //  $toFile = dirname($file).'/new.jpg';
        $file   = __DIR__.'/image/111.jpg';
        $toFile = $file.'_thumb.jpg';
        $this->toCompress($file, $toFile);

        $file   = __DIR__.'/image/222.jpg';
        $toFile = $file.'_thumb.jpg';
        $this->toCompress($file, $toFile);

        $file   = __DIR__.'/image/333.jpg';
        $toFile = $file.'_thumb.jpg';
        $this->toCompress($file, $toFile);

        return $this->success($toFile);
    }

    // 自己写的压缩文件方法
    protected function toCompress($file, $toFile)
    {
        // 图片信息
        $splFile  = new \SplFileInfo($file);
        $filePath = $splFile->getPathname();
        //获取图像信息
        $info = @getimagesize($filePath);
        $type = image_type_to_extension($info[2], false);
        $fun  = "imagecreatefrom{$type}";
        $im   = @$fun($filePath);

        // 新图片高与宽
        $width     = $info[0];
        $height    = $info[1];
        $to_width  = 500;
        $to_height = $height * $to_width / $width;

        // 制作等比例图片
        if($width > $to_width){
            //创建新图像
            $x   = $y = 0;
            $img = imagecreatetruecolor($to_width, $to_height);
            imagesavealpha($img, true); //这里很重要 意思是不要丢了$sourePic图像的透明色
            $color = imagecolorallocatealpha($img, 255, 255, 255, 127);
            imagefill($img, 0, 0, $color);
            // 裁剪
            imagecopyresampled($img, $im, 0, 0, $x, $y, $to_width, $to_height, $width, $height);
            imagedestroy($im); //销毁原图
            // 新突破
            $im = $img;
        }

        // 保存图片
        imageinterlace($im, 1);  // 间隔扫描 1-提升质量
        imagejpeg($im, $toFile, 70);  // 图片质量70
        imagedestroy($im);

        return $toFile;
    }

    // 生成二维码
    public function qrcode()
    {
        $uid = 2;
        $qr  = new \App\Service\QRcode();
        $url = $qr->getQR($uid);

        return $url;
    }


    public function qrcode2()
    {
        // 各种参数
        $uid    = 1;
        $test   = 'https://www.ifeng.com/'.$uid.'.html';  //二维码内容
        $size   = 6;  //生成图片大小
        $domain = 'http://slh.shenlannews.com';

        $path   = public_path();  // 根目录路径
        $logo   = '/static/logo.png';    //准备好的logo图片
        $QRFile = '/qrcode/'.$uid.'.png';  // 已经生成的原始二维码图
        $logoQR = '/qrcode/'.$uid.'_logo.png';  // 生成的二维码图片位置

        //生成二维码图片
        $errorLevel = 'L';  //容错级别
        QRcode::png($test, $path.$QRFile, $errorLevel, $size, 2);
        if(empty($logo)){
            return $domain.$QRFile;
        }

        // 打开生成的二维码图片 与 logo图片
        $QR   = imagecreatefromstring(file_get_contents($path.$QRFile));
        $logo = imagecreatefromstring(file_get_contents($path.$logo));
        // 调整二维码内部的logo
        $QR_width       = imagesx($QR);  // 二维码图片宽度
        $QR_height      = imagesy($QR);  // 二维码图片高度
        $logo_width     = imagesx($logo);  // logo图片宽度
        $logo_qr_width  = $QR_width / 5;   // 二维码中logo的宽度
        $from_width     = ($QR_width - $logo_qr_width) / 2; // 二维码中logo的起始位置
        $logo_height    = imagesy($logo);      //logo图片高度
        $scale          = $logo_width / $logo_qr_width;  // logo的长宽比例
        $logo_qr_height = $logo_height / $scale;  // logo的应该的宽度

        //重新组合图片并调整大小
        imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
        //输出图片
        imagepng($QR, $path.$logoQR);

        return $domain.$logoQR;
    }
}
